#include <stdio.h>

int main(int argc, const char *argv[])
{
	int a = 10;		// 变量 a
	int *p = &a;	// 一级指针 p
	int **q = &p;	// 二级指针 q
	// 有了上述三行代码 就有下面的等价关系
	// a <==> *p <==> **q
	// &a <==> p <==> *q 
	// &p <==> q
	printf("a = %d  *p = %d  **q = %d\n", a, *p, **q); // 一样的
	printf("&a = %p  p = %p  *q = %p\n", &a, p, *q); // 一样的
	printf("&p = %p  q = %p\n",  &p, q); // 一样的

	// 不要使用一级指针保存一级指针的地址:
	// 只保存没问题
	int *q2 = &p;
	printf("q2 = %p\n", q2); // p 的地址
	// 但是一级指针不能取 ** 操作
	// printf("**q2 = %d\n", **q2); // 错误的

	return 0;
}
